package com.gec.zhs.entity.query;
import com.gec.zhs.entity.enums.PageSize;
import lombok.Data;

/**
 * @author zhs
 * @version 1.0
 * @date 2025-01-09
 * @description 页面数据
 */
@Data
public class SimplePage {
	//页码
	private int pageNo;
	//总数据量
	private int countTotal;
	//页码长度
	private int pageSize;
	//总页码
	private int pageTotal;
	//开始索引
	private int start;
	//结束索引
	private int end;

	public SimplePage() {
	}

	/**
	 * @param pageNo 当前页码，传入null时默认为第1页
	 * @param countTotal 数据的总数量
	 * @param pageSize 每页显示的数据条目数
	 */
	public SimplePage(Integer pageNo, int countTotal, int pageSize) {
		// 如果传入的页码为空，默认设置为0，表示第一页
		if (null == pageNo) {
			pageNo = 0;
		}
		this.pageNo = pageNo;       // 设置当前页码
		this.countTotal = countTotal;  // 设置总记录数
		this.pageSize = pageSize;   // 设置每页条目数
		action();   // 计算分页信息
	}

	/**
	 * @param start 起始记录索引
	 * @param end 结束记录索引
	 */
	public SimplePage(int start, int end) {
		this.start = start;   // 设置开始索引
		this.end = end;       // 设置结束索引
	}

	/**
	 * 计算分页相关的属性，包括总页数、起始索引、结束索引等
	 */
	public void action() {
		// 如果每页条目数小于等于0，默认设置为20
		if (this.pageSize <= 0) {
			this.pageSize = PageSize.SIZE20.getSize();  // 默认每页20条
		}

		// 如果总记录数大于0，计算总页数
		if (this.countTotal > 0) {
			// 总页数通过总记录数除以每页条目数得到，如果有余数则需要加1页
			this.pageTotal = this.countTotal % this.pageSize == 0 ? this.countTotal / this.pageSize
					: this.countTotal / this.pageSize + 1;
		} else {
			// 如果总记录数为0，设置总页数为1
			pageTotal = 1;
		}

		// 页码不能小于1，默认设置为1
		if (pageNo <= 1) {
			pageNo = 1;
		}

		// 页码不能大于总页数，设置为总页数
		if (pageNo > pageTotal) {
			pageNo = pageTotal;
		}

		// 计算当前页的起始记录索引
		this.start = (pageNo - 1) * pageSize;

		// 设置结束记录索引为每页条目数
		this.end = this.pageSize;
	}

}
